add more field to SerializedPackage
authorAleksey Kladov <aleksey.kladov@gmail.com>
Wed, 16 Dec 2015 22:04:19 +0000 (01:04 +0300)
committerAleksey Kladov <aleksey.kladov@gmail.com>
Thu, 17 Dec 2015 22:53:26 +0000 (01:53 +0300)
src/cargo/core/package.rs
tests/test_cargo_read_manifest.rs

index c147a224c62de27a0702cbe19390e56ba7f3e4c4..4b5778ae34fe41087f01e4562635abc5b2119c92 100644 (file)
@@ -1,3 +1,4 @@
+use std::collections::HashMap;
 use std::fmt::{self, Formatter};
 use std::hash;
 use std::slice;
@@ -24,25 +25,30 @@ pub struct Package {
 
 #[derive(RustcEncodable)]
 struct SerializedPackage<'a> {
-    name: String,
-    version: String,
+    name: &'a str,
+    version: &'a str,
+    id: &'a PackageId,
+    source: &'a SourceId,
     dependencies: &'a [Dependency],
-    targets: Vec<Target>,
-    manifest_path: String,
+    targets: &'a [Target],
+    features: &'a HashMap<String, Vec<String>>,
+    manifest_path: &'a str,
 }
 
 impl Encodable for Package {
     fn encode<S: Encoder>(&self, s: &mut S) -> Result<(), S::Error> {
-        let manifest = self.manifest();
-        let summary = manifest.summary();
+        let summary = self.manifest.summary();
         let package_id = summary.package_id();
 
         SerializedPackage {
-            name: package_id.name().to_string(),
-            version: package_id.version().to_string(),
+            name: &package_id.name(),
+            version: &package_id.version().to_string(),
+            id: package_id,
+            source: summary.source_id(),
             dependencies: summary.dependencies(),
-            targets: manifest.targets().to_vec(),
-            manifest_path: self.manifest_path.display().to_string()
+            targets: &self.manifest.targets(),
+            features: summary.features(),
+            manifest_path: &self.manifest_path.display().to_string(),
         }.encode(s)
     }
 }
index 68ecabac6893549a81ddc875cbda789ae937564c..4dae204584750288f22328b8536ac9ad25942e4c 100644 (file)
@@ -3,19 +3,26 @@ use hamcrest::{assert_that};
 
 fn setup() {}
 
+fn remove_all_whitespace(s: &str) -> String {
+    s.split_whitespace().collect()
+}
+
 fn read_manifest_output() -> String {
-    "\
-{\
-    \"name\":\"foo\",\
-    \"version\":\"0.5.0\",\
-    \"dependencies\":[],\
-    \"targets\":[{\
-        \"kind\":[\"bin\"],\
-        \"name\":\"foo\",\
-        \"src_path\":\"src[..]foo.rs\"\
-    }],\
-    \"manifest_path\":\"[..]Cargo.toml\"\
-}".into()
+    remove_all_whitespace(r#"
+{
+    "name":"foo",
+    "version":"0.5.0",
+    "id":"foo[..]0.5.0[..](path+file://[..]/foo)",
+    "source":null,
+    "dependencies":[],
+    "targets":[{
+        "kind":["bin"],
+        "name":"foo",
+        "src_path":"src[..]foo.rs"
+    }],
+    "features":{},
+    "manifest_path":"[..]Cargo.toml"
+}"#)
 }
 
 test!(cargo_read_manifest_path_to_cargo_toml_relative {